package com.zjcloud.jwgl.mapper;

import java.util.List;
import com.zjcloud.jwgl.domain.AcTemplateConstraintRel;

/**
 * 模板约束关联Mapper接口
 * 
 * @author zjcloud
 * @date 2024-01-01
 */
public interface AcTemplateConstraintRelMapper 
{
    /**
     * 查询模板约束关联
     * 
     * @param id 模板约束关联主键
     * @return 模板约束关联
     */
    public AcTemplateConstraintRel selectAcTemplateConstraintRelById(Long id);

    /**
     * 查询模板约束关联列表
     * 
     * @param acTemplateConstraintRel 模板约束关联
     * @return 模板约束关联集合
     */
    public List<AcTemplateConstraintRel> selectAcTemplateConstraintRelList(AcTemplateConstraintRel acTemplateConstraintRel);

    /**
     * 根据模板ID查询关联的约束类型列表
     * 
     * @param templateId 模板ID
     * @return 模板约束关联集合
     */
    public List<AcTemplateConstraintRel> selectRelationsByTemplateId(Long templateId);

    /**
     * 根据约束类型ID查询关联的模板列表
     * 
     * @param constraintTypeId 约束类型ID
     * @return 模板约束关联集合
     */
    public List<AcTemplateConstraintRel> selectRelationsByConstraintTypeId(Long constraintTypeId);

    /**
     * 根据模板ID查询启用的约束类型列表
     * 
     * @param templateId 模板ID
     * @return 模板约束关联集合
     */
    public List<AcTemplateConstraintRel> selectEnabledRelationsByTemplateId(Long templateId);

    /**
     * 根据模板ID和约束类型ID查询关联关系
     * 
     * @param templateId 模板ID
     * @param constraintTypeId 约束类型ID
     * @return 模板约束关联
     */
    public AcTemplateConstraintRel selectRelationByTemplateAndConstraintType(Long templateId, Long constraintTypeId);

    /**
     * 新增模板约束关联
     * 
     * @param acTemplateConstraintRel 模板约束关联
     * @return 结果
     */
    public int insertAcTemplateConstraintRel(AcTemplateConstraintRel acTemplateConstraintRel);

    /**
     * 修改模板约束关联
     * 
     * @param acTemplateConstraintRel 模板约束关联
     * @return 结果
     */
    public int updateAcTemplateConstraintRel(AcTemplateConstraintRel acTemplateConstraintRel);

    /**
     * 删除模板约束关联
     * 
     * @param id 模板约束关联主键
     * @return 结果
     */
    public int deleteAcTemplateConstraintRelById(Long id);

    /**
     * 批量删除模板约束关联
     * 
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteAcTemplateConstraintRelByIds(Long[] ids);

    /**
     * 根据模板ID删除关联关系
     * 
     * @param templateId 模板ID
     * @return 结果
     */
    public int deleteRelationsByTemplateId(Long templateId);

    /**
     * 根据约束类型ID删除关联关系
     * 
     * @param constraintTypeId 约束类型ID
     * @return 结果
     */
    public int deleteRelationsByConstraintTypeId(Long constraintTypeId);

    /**
     * 批量新增模板约束关联
     * 
     * @param relations 模板约束关联列表
     * @return 结果
     */
    public int batchInsertAcTemplateConstraintRel(List<AcTemplateConstraintRel> relations);

    /**
     * 批量更新模板约束关联
     * 
     * @param relations 模板约束关联列表
     * @return 结果
     */
    public int batchUpdateAcTemplateConstraintRel(List<AcTemplateConstraintRel> relations);

    /**
     * 更新关联关系状态
     * 
     * @param id 关联关系ID
     * @param enabled 启用状态
     * @return 结果
     */
    public int updateRelationStatus(Long id, String enabled);

    /**
     * 批量更新关联关系状态
     * 
     * @param ids 关联关系ID数组
     * @param enabled 启用状态
     * @return 结果
     */
    public int batchUpdateRelationStatus(Long[] ids, String enabled);

    /**
     * 更新关联关系权重
     * 
     * @param id 关联关系ID
     * @param weight 权重
     * @return 结果
     */
    public int updateRelationWeight(Long id, Integer weight);

    /**
     * 批量更新关联关系权重
     * 
     * @param relations 关联关系列表(包含ID和权重)
     * @return 结果
     */
    public int batchUpdateRelationWeights(List<AcTemplateConstraintRel> relations);

    /**
     * 检查模板和约束类型关联是否存在
     * 
     * @param templateId 模板ID
     * @param constraintTypeId 约束类型ID
     * @return 结果
     */
    public int checkRelationExists(Long templateId, Long constraintTypeId);

    /**
     * 检查模板和约束类型关联是否存在(排除指定ID)
     * 
     * @param templateId 模板ID
     * @param constraintTypeId 约束类型ID
     * @param id 排除的ID
     * @return 结果
     */
    public int checkRelationExistsExcludeId(Long templateId, Long constraintTypeId, Long id);
}